package org.jsola.hr.helper;

import org.jsola.common.DateKit;
import org.jsola.hr.dao.IEmpSecretKeysDAO;
import org.jsola.hr.dto.EmpSecretKeysAddDTO;
import org.jsola.hr.dto.EmpSecretKeysUpdateDTO;
import org.jsola.hr.entity.EmpSecretKeysDO;
import org.jsola.hr.query.EmpSecretKeysQuery;
import org.jsola.hr.service.IEmpSecretKeysService;
import org.jsola.hr.vo.EmpInfoVO;
import org.jsola.hr.vo.EmpSecretKeysVO;
import org.jsola.module.ModuleContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.stream.Collectors;

import static org.jsola.hr.core.AbstractTest.SITE_ID;
import static org.jsola.hr.core.TestCommonConstans.CODE_EMP_LIST;
import static org.jsola.hr.core.TestCommonConstans.EMP_SECRETKEYS_DO_LIST;


/**
 * @author zhr
 */
@Component
public class EmpSecretKeysTestHelper extends BaseTestHelper {
    
    @Autowired
    private IEmpSecretKeysService empSecretKeysService;

    @Autowired
    private IEmpSecretKeysDAO empSecretKeysDAO;

    /**
     * 生成add测试数据
     * @return EmpSecretKeysAddDTO
     */
    public EmpSecretKeysAddDTO getEmpSecretKeysAddDTO(){
        EmpSecretKeysAddDTO empSecretKeysAddDTO = new EmpSecretKeysAddDTO();
        empSecretKeysAddDTO.setEmpId(getRandomValue("varchar",32));
        empSecretKeysAddDTO.setKeyType(getRandomValue("varchar",32));
        empSecretKeysAddDTO.setKeyStr(getRandomValue("varchar",255));
        empSecretKeysAddDTO.setKeySalt(getRandomValue("varchar",255));
        empSecretKeysAddDTO.setCompanyId(getRandomValue("varchar",32));
        return empSecretKeysAddDTO;
    }


    /**
     * 生成update测试数据
     * @return EmpSecretKeysUpdateDTO
     */
    public EmpSecretKeysUpdateDTO getEmpSecretKeysUpdateDTO(EmpSecretKeysVO empSecretKeysVO){
        return empSecretKeysService.selectDOById(empSecretKeysVO.getId(), SITE_ID).to(EmpSecretKeysUpdateDTO.class);
    }

    /**
     * 生成查询数据
     * @return EmpSecretKeysQuery
     */
    public EmpSecretKeysQuery getEmpSecretKeysQuery() {
        EmpSecretKeysQuery empSecretKeysQuery = new EmpSecretKeysQuery();
        List<EmpSecretKeysDO> empSecretKeysDOList = empSecretKeysService.list(new EmpSecretKeysDO(),SITE_ID);
        if (!CollectionUtils.isEmpty(empSecretKeysDOList)) {
            EmpSecretKeysDO empSecretKeysDO = empSecretKeysDOList.get(0);
            empSecretKeysQuery = empSecretKeysDO.to(EmpSecretKeysQuery.class);
            if (empSecretKeysDO.getGmtCreate() != null) {
                empSecretKeysQuery.setGmtCreateStart(DateKit.getBeforeDay(empSecretKeysDO.getGmtCreate(),-1));
                empSecretKeysQuery.setGmtCreateEnd(DateKit.getBeforeDay(empSecretKeysDO.getGmtCreate(),1));
            }
            if (empSecretKeysDO.getGmtModified() != null) {
                empSecretKeysQuery.setGmtModifiedStart(DateKit.getBeforeDay(empSecretKeysDO.getGmtModified(),-1));
                empSecretKeysQuery.setGmtModifiedEnd(DateKit.getBeforeDay(empSecretKeysDO.getGmtModified(),1));
            }
        }
        return empSecretKeysQuery;
    }

    /**
     * 保存示例
     * @return EmpSecretKeysVO
     */
    public EmpSecretKeysVO saveEmpSecretKeysExample(){
        EmpSecretKeysAddDTO addDTO = this.getEmpSecretKeysAddDTO();
        EmpSecretKeysVO empSecretKeysVO = empSecretKeysService.save(addDTO,buildTokenUser());
        return empSecretKeysVO;
    }

    /**
     * 批量生成add测试数据
     * @return EmpSecretKeysAddDTO
     */
    public ModuleContext batchSaveSecretKeysExample(ModuleContext moduleContext){
        List<EmpInfoVO> empInfoVOList = moduleContext.get(CODE_EMP_LIST);
        List<EmpSecretKeysDO> empSecretKeysDOList = empInfoVOList.stream().map(empInfoVO -> {
            EmpSecretKeysAddDTO empSecretKeysAddDTO = new EmpSecretKeysAddDTO();
            empSecretKeysAddDTO.setEmpId(empInfoVO.getId());
            empSecretKeysAddDTO.setKeyType("RSA_PUB");
            empSecretKeysAddDTO.setKeyStr(getRandomValue("varchar",255));
            empSecretKeysAddDTO.setKeySalt(getRandomValue("varchar",255));
            empSecretKeysAddDTO.setCompanyId(empInfoVO.getCompanyId());
            return empSecretKeysAddDTO.to(EmpSecretKeysDO.class);
        }).collect(Collectors.toList());

        empSecretKeysDAO.insertListAndSetId(empSecretKeysDOList);
        moduleContext.add(EMP_SECRETKEYS_DO_LIST, empSecretKeysDOList);
        return moduleContext;
    }


}

